package Grafos;

/**
 * Universidad del Valle de Guatemala
 * Algoritmos y Estructura de Datos
 * @author Jonathan López - 11106
 * 20 de noviembre del 2012
 */

/**
 * Clase que implementa algunos de los métodos que demanda la interfaz
 * ComponenteRedInterface.
 */
abstract public class ComponenteRed implements ComponenteRedInterface{
    
    //------------------------------------------------------------------------
    // Atributos
    //------------------------------------------------------------------------
    
    //Nombre del Componente
    public String nombreComponente;
    
    //Velocidad de Envio por Cable de Red
    public Double velocidadReenvio;
    
    //Conexión Wifi
    public String conectividad;
    
    //Velocidad de la Conexión Wifi
    public Integer velocidadWifi;
    
    //Estandares de la IEEE
    public String estandares;
    
    //Número de Puertos de Entrada
    public String puertosE;
    
    //Velocidad de Conexión LAN
    public Integer velocidadLAN;
    
    //Precio del Componente
    public Double precio;
    
    //Bandas de Conexión
    public Double bandas;
    
    //Indicador si el Componente es un Ordenador
    public boolean iscompu = true;
    

    //------------------------------------------------------------------------
    // Constructor
    //------------------------------------------------------------------------
    
    /**
     *
     * @param nombreComponente
     * @param velocidadReenvio
     * @param conectividad
     * @param velocidadWifi
     * @param estandares
     * @param puertosE
     * @param velocidadLAN
     * @param bandas
     */
    public ComponenteRed(String nombreComponente, Double velocidadReenvio, String conectividad, Integer velocidadWifi, String estandares, String puertosE, Integer velocidadLAN, Double bandas) {
        this.nombreComponente = nombreComponente;
        this.velocidadReenvio = velocidadReenvio;
        this.conectividad = conectividad;
        this.velocidadWifi = velocidadWifi;
        this.estandares = estandares;
        this.puertosE = puertosE;
        this.velocidadLAN = velocidadLAN;
        this.bandas = bandas;
    }
    
    /**
     *
     */
    public ComponenteRed(){
        
    }
    
    
    //------------------------------------------------------------------------
    // Getters y Setters
    //------------------------------------------------------------------------
    
    /**
     * Establece el Nombre del Componente Red
     * @param nombreComponente Nombre del componente
     */
    public void setNombreComponente(String nombreComponente){
        this.nombreComponente=nombreComponente;
    }

    /**
     * Devuelve el Nombre del Componente de Red
     * @return nombreComponente Nombre del Componente.
     */
    @Override
    public String getNombreComponente() {
        return nombreComponente;
    }

    /**
     * Devuelve la Conectividad del Componente de Red
     * @return conectividad Conectividad del Componente de Red
     */
    @Override
    public String getConectividad() {
        return conectividad;
    }

    /**
     * Devuelve la Velocidad del Wifi del Componente de Red
     * @return velocidadWifi la Velocidad del Wifi del Componente de Red
     */
    @Override
    public Integer getVelocidadWifi() {
        return velocidadWifi;
    }

    /**
     * Devuelve los Estandares de la IEEE del Componente de Red
     * @return estandares los Estandares de la IEEE del Componente de Red
     */
    @Override
    public String getEstandares() {
        return estandares;
    }

    /**
     * Devuelve la cantidad e Puertos de Entrada del Componente de Red
     * @return puertosE la cantidad e Puertos de Entrada del Componente de Red
     */
    @Override
    public String getPuertosE() {
        return puertosE;
    }

    /**
     * Devuelve la Velocidad de Conexión LAN del Componente de Red
     * @return velocidadLAN la Velocidad de Conexión LAN del Componente de Red
     */
    @Override
    public Integer getVelocidadLAN() {
        return velocidadLAN;
    }

    /**
     * Devuleve el Precio del Componente de Red
     * @return precio el Precio del Componente de Red
     */
    @Override
    public Double getPrecio() {
        return precio;
    }
    
    /**
     * Devuelve la Velocidad de Transferencia del Componente de Red
     * @return velocidadReenvio la Velocidad de Transferencia del Componente de Red
     */
    @Override
    public Double getVelocidadReenvio() {
        return velocidadReenvio;
    }
    
    /**
     * Devuelve las Bandas del Componente de Red
     * @return bandas las Bandas del Componente de Red
     */
    public Double getBandas(){
        return bandas;
    }
    

    
    //------------------------------------------------------------------------
    // Métodos
    //------------------------------------------------------------------------
    
    /**
     * Returns true iff the labels of two vertices are equal.
     *
     * @post returns true iff vertex labels are equal
     * 
     * @param o Another vertex.
     * @return True iff the vertex labels are equal.
     */
    public boolean equals(Object o)
    {
        ComponenteRed v = (ComponenteRed)o;
        return nombreComponente.equals(v.getNombreComponente());
    }

    /**
     * Construct a string representing vertex.
     *
     * @post returns string representation of vertex
     * 
     * @return A string representing vertex.
     */
    public String toString()
    {
        return "<Vertex: "+nombreComponente+">";
    }
}
  